/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package MODELO;

import java.sql.*;
import javax.swing.DefaultComboBoxModel;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author linux
 */
public class DAOEntidadRed extends ManejadorBaseDatos implements IDAOPersistencia {

    public DAOEntidadRed() throws Exception {
        super();
    }

    public DAOEntidadRed(String driver, String servidor, String url, String usuarioBD, String passwordUsuarioBD, String nombreBD) throws Exception {
        super(driver, servidor, url, usuarioBD, passwordUsuarioBD, nombreBD);
    }

    public int contar() {
        int rpta = 0;
        try {
            // se crea instancia a procedimiento, los parametros de entrada y salida se simbolizan con el signo ?
            CallableStatement proc = getConexion().prepareCall(" CALL red_contar() ");
            ResultSet res = proc.executeQuery();
            while (res.next()) {
                rpta = Integer.parseInt(res.getString("COUNT(*)"));
            }
            res.close();
        } catch (SQLException | NumberFormatException e) {
            System.out.println(e);
        }
        desconectar();
        return rpta;
    }

    public String getCodigo_redMaxId() {
        String variabl = "";
        try {
            CallableStatement proc =getConexion().prepareCall(" CALL red_admin_maxId() ");
            ResultSet res = proc.executeQuery();
            while (res.next()) {
                if (res.getRow() == 0) {
                    variabl = "" + 00;
                } else {
                    variabl = res.getString("maxId").toString();
                }
            }
            res.close();
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        }
        desconectar();
        return variabl;
    }
    
    public DefaultComboBoxModel getListaRed() {
        DefaultComboBoxModel model = new DefaultComboBoxModel();
        Connection conn = getConexion();
        try {
            CallableStatement proc = conn.prepareCall(" CALL red_listar_user() ");
            ResultSet res = proc.executeQuery();
            while (res.next()) {
                model.addElement(res.getString("nombre"));
            }
            res.close();
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        }
        desconectar();
        return model;
    }
    public DefaultComboBoxModel getListaRed(String subCod_microred) {
        DefaultComboBoxModel model = new DefaultComboBoxModel();
        Connection conn = getConexion();
        try {
            CallableStatement proc = conn.prepareCall(" CALL red_Listr_User(?) ");
            proc.setString("subCod_microred", subCod_microred);
            ResultSet res = proc.executeQuery();
            while (res.next()) {
                model.addElement(res.getString("nombre"));
            }
            res.close();
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        }
        desconectar();
        return model;
    }

    public DefaultTableModel getTablaRed() {
        DefaultTableModel tablemodel = new DefaultTableModel();
        String[] columNames = {"Codigo","Nombre", "Estado"};
        Object[][] data = new String[contar()][3];
        try {
            conectar();
            //realizamos la consulta sql y llenamos los datos en la matriz "Object[][] data"
            CallableStatement pstm = this.getConexion().prepareCall("CALL red_listar_admin()");
            ResultSet res = pstm.executeQuery();
            int i = 0;
            while (res.next()) {
                data[i][0]=res.getString("codigo");
                data[i][1] = res.getString("nombre");
                data[i][2] = res.getString("estado");
                
                i++;
            }
            res.close();
            //se añade la matriz de datos en el DefaultTableModel
            tablemodel.setDataVector(data, columNames);
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        desconectar();
        return tablemodel;
    }

    public int getCodigo_red(String nombre) {
        int variabl = 0;
        try {
            CallableStatement proc = getConexion().prepareCall(" CALL red_obtener_cod(?) ");
            proc.setString("pnombre", nombre);
            ResultSet res = proc.executeQuery();
            while (res.next()) {
                variabl = Integer.parseInt(res.getString("codigo"));
            }
            res.close();
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        }
        desconectar();
        return variabl;
    }

    public String getCodigo_redString(String nombre) {
        String variabl = "";
        try {
            CallableStatement proc = getConexion().prepareCall(" CALL red_obtener_cod(?) ");
            proc.setString("pnombre", nombre);
            ResultSet res = proc.executeQuery();
            while (res.next()) {
                variabl = res.getString("codigo");
            }
            res.close();
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        }
        desconectar();
        return variabl;
    }
    
    @Override
    public int insertar(IEntidad objeto) throws Exception {
        int rpta = 0;
        EntidadRed red1 = (EntidadRed) objeto;
        Connection conn = getConexion();
        try {
            // se crea instancia a procedimiento, los parametros de entrada y salida se simbolizan con el signo ?
            CallableStatement proc = conn.prepareCall(" CALL red_insertar(?,?)");
            //se cargan los parametros de entrada
            proc.setString("codigo", red1.getCodigo1());//Tipo int
            proc.setString("nombre", red1.getNombre());//Tipo String
            if (proc.execute()) {
                rpta = 1;
            } else {
                rpta = 0;
            }
        } catch (Exception e) {
            System.out.println(e);
        }
        desconectar();
        return rpta;
    }

    @Override
    public int borrar(String condicion) throws Exception {
        return 0;
        
    }

    @Override
    public int modificar(IEntidad objeto) throws Exception {
        int rpta = 0;
        EntidadRed red1 = (EntidadRed) objeto;
        Connection conn = getConexion();
        try {
            // se crea instancia a procedimiento, los parametros de entrada y salida se simbolizan con el signo ?
            CallableStatement proc = conn.prepareCall(" CALL red_modificar(?,?)");
            //se cargan los parametros de entrada
            proc.setString("codig", red1.getCodigo1());//Tipo int
            proc.setString("nombre1", red1.getNombre());//Tipo String
            if (proc.execute()) {
                rpta = 1;
            } else {
                rpta = 0;
            }
        } catch (Exception e) {
            System.out.println(e);
        }
        desconectar();
        return rpta;
    }
}
